Advanced Security: Rate Limiting, Authorization & XSS
Rate Limiting (Advanced Strategies)
Problem with Per-IP Limiting
-
Attackers can bypass using:
- VPNs
- Botnets
- Rotating IPs
-
Shared networks (e.g., colleges) cause:
- False positives
Per-Account Rate Limiting
Concept
- Limit failed attempts per account
Example
- 5 failed logins → lock account for 24 hours
Benefit
- Protects targeted accounts
- Stops brute force on a single user
Limitation
-
Attackers can:
- Try 1 password across many accounts
- Avoid triggering per-account lock
Global Rate Limiting
Concept
- Limit total login attempts system-wide
Example
- Max 100 attempts/minute globally
Benefit
-
Stops distributed attacks:
- Multiple IPs
- Multiple accounts
Response Strategy
- Trigger alerts
- Block suspicious IPs
- Show CAPTCHA
Layered Rate Limiting Strategy
-
Combine:
- Per-IP
- Per-account
- Global
Goals
-
Prevent:
- Brute force attacks
- Server overload (DoS)
Authorization Security
Authentication vs Authorization
-
Authentication:
- Who are you?
-
Authorization:
- What can you do?
Where Vulnerabilities Arise
- Not in definitions
- But in implementation gaps
Common Backend Flow
- Routing Layer
- Handler Layer
- Service Layer
- Repository Layer (DB access)
Typical Mistake
-
Authorization checked only at:
- Routing layer
False Assumption
- “User is authenticated → safe everywhere”
Broken Object Level Authorization (BOLA)
Definition
- User accesses resources they don’t own
Example Scenario
-
API:
GET /books?id=5 -
Backend query:
SELECT * FROM books WHERE id = 5
Problem
-
No ownership check:
- User can access any book
Attack
-
Iterate IDs:
/books?id=1,2,3,...
-
Extract sensitive data:
- Invoices
- Financial records
Fix
- Always include ownership check:
SELECT * FROM books
WHERE id = 5 AND user_id = current_user
Key Insight
-
Authorization must be enforced:
- At the data layer (DB)
Information Leakage Issue
Bad Practice
- Return
403 Forbidden
Why It’s Dangerous
-
Confirms:
- Resource exists
Attack Result
-
Attackers can:
- Enumerate valid IDs
Better Approach
- Return
404 Not Found
Benefit
-
Hides:
- Whether resource exists
Broken Function Level Authorization (BFLA)
Definition
- Unauthorized access to functions/endpoints
Example
-
Endpoint:
/admin/invoices
Vulnerability
- Only hidden in frontend
- No backend role check
Problem
-
Any authenticated user can:
- Call API directly
Fix
- Enforce role checks:
if user.role != 'admin':
deny access
Key Principle
-
❌ Security through obscurity
-
✅ Enforce server-side authorization
-
Should Add a middleware for this.
IDOR (Indirect Object Reference) X Broken Access COntrol Patterns (BACP)
Problem
-
Predictable IDs:
- 101, 102, 103...
Attack
- Guess IDs
- Enumerate resources
Fix
-
Use:
- UUIDs (random IDs)
Tradeoff
- Slight performance cost
- Much better security
Authorization Mental Model
Two Types of Attacks
1. Horizontal Escalation
-
Access other users’ data
-
Example:
- BOLA / IDOR
2. Vertical Escalation
-
Access higher privileges
-
Example:
- BFLA (user → admin)
Authorization Best Practices
1. Centralize Authorization
-
Avoid scattered checks
-
Maintain:
- Single authorization layer
2. Default Deny
- If not explicitly allowed:
- Deny access
- If adding new resources, protected by default.
3. Test Authorization
-
Test:
- User A ≠ access User B
- User ≠ admin actions
- Unauthenticated access blocked
-
Fix:
- Make Atomated Checks in CI/CD Pipeline.
4. Audit Logs
-
Log:
- Admin actions
- Failed authorization attempts
-
Helps:
- Detect attacks early
Cross-Site Scripting (XSS)
Definition
-
Attacker executes JavaScript in:
- Another user’s browser
JS normally has all the data and CAN READ COOKIES ALSO (as long they're not HTTP-only) for auth & session token.
Why Dangerous
-
Can:
- Steal cookies/session
- Make API calls as user
- Redirect to phishing sites
- Modify UI
Root Cause
-
Treating:
- User input as code
Stored XSS
Scenario
-
User submits comment with:
- Malicious
<script>
- Malicious
Flow
- Stored in DB
- Sent to other users
- Rendered in browser
- Script executes
Example Context
- Markdown → HTML conversion
- Injected into DOM
Dangerous API
-
dangerouslySetInnerHTML(React)There are Reflected XSS,DOM Based XSS.
User defined content being treated as code rather than data.
Happens in User's browser.
Fix: Sanitization
Server Responsibility
-
Remove:
<script>tags- Dangerous attributes
Rule
-
Always sanitize anything given by user:
- Before storing or rendering
Content Security Policy (CSP)
What It Is
-
HTTP header controlling:
- What browser can execute
Example Rules
- Only allow scripts from trusted domains
- Block inline scripts
Role
-
Acts as:
- Last line of defense
Important
- CSP ≠ primary protection
- Sanitization still required
CSRF (Brief Overview)
Concept
- Browser sends cookies automatically
Attack
-
Malicious site triggers request:
- Using user’s cookies
Why Less Relevant Today
-
Modern protections:
- SameSite cookies
- CORS policies
Prevention
-
Use:
- SameSite = Strict/Lax - By Default (Lax)
- Secure cookies
Misconfiguration Risks
1. Secrets in Code
- Storing API keys in Git
Risk
-
Anyone with repo access:
- Gets secrets
Fix
-
Use:
- Environment variables
- Secret managers
Important
-
If leaked:
- Rotate immediately
2. Debug Mode in Production
-
Logs include:
- Stack traces
- SQL queries
- Sensitive data
Risk
- Info leakage via logs
Fix
- Use:
INFOlevel in production
- Set LOG level of your staging, production and local environment.
3. Security Headers
-
Examples:
- CSP
- X-Frame-Options
Benefit
-
Prevent:
- Clickjacking
- Script injection
Implementation
- Use middleware:
- Auto-configures headers
Core Security Philosophy
Everything is About Boundaries
-
Vulnerabilities occur when:
- Data crosses boundaries
Examples
- User input → SQL → Injection
- User input → HTML → XSS
- User → Other user’s data → BOLA
Questions to Ask Always
- Where is data crossing boundaries?
- What assumptions am I making?
- What if those assumptions are wrong?
Defense in Depth (Layers)
1. Input Validation
- First line of defense
2. Parameterized Operations
- Prevent injection
3. Authorization at Access Point
- Check where data is accessed
4. Security Headers
- Limit damage
5. Monitoring & Logging
- Detect suspicious activity
Final Takeaway
-
Security is not:
- A feature
-
It is:
- A mindset
Golden Rule
-
Always think:
- “How can this be abused?”
Resources
https://portswigger.net/web-security https://owasp.org/www-project-top-ten/ https://cheatsheetseries.owasp.org/index.html